package avicit.bdp.oss.dao;

import avicit.bdp.common.base.BaseDAO;
import avicit.bdp.oss.dto.ObjectDto;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * @金航数码科技有限责任公司
 * @作者：developer
 * @邮箱：developer@avic-digital.com
 * @创建时间： 2020-11-12
 * @类说明：ObjectDao
 * @修改记录：
 * @注意事项：
 */
@Repository
public interface ObjectDao extends BaseDAO<ObjectDto> {
    /**
     * 列举对象
     * @param orderField
     * @param orderType
     * @param bucketName
     * @param prefix
     * @param objectName
     * @return
     */
    Page<ObjectDto> getObjectList(String orderField, String orderType,
                                  @Param("bucketName")String bucketName,
                                  @Param("prefix")String prefix,
                                  @Param("objectName")String objectName);

    /**
     * 列举对象，从公有桶中列举
     * @param orderField
     * @param orderType
     * @param bucketName
     * @param prefix
     * @param objectName
     * @return
     */
    Page<ObjectDto> getObjectListFromPublicBucket(
            @Param("bucketName")String bucketName,
            @Param("prefix")String prefix,
            @Param("objectName")String objectName,
            @Param("userId")String userId,
            String orderField, String orderType);

    /**
     * 列举对象，从private桶中列举
     * @param orderField
     * @param orderType
     * @param bucketName
     * @param prefix
     * @param objectName
     * @return
     */
    Page<ObjectDto> getObjectListFromPrivateBucket(
            @Param("bucketName")String bucketName,
            @Param("prefix")String prefix,
            @Param("objectName")String objectName,
            @Param("userId")String userId,
            String orderField, String orderType);
    /**
     * 根据对象名称、前缀、桶名称获取对象信息
     * @param bucketName
     * @param prefix
     * @param objectName
     * @return
     */
    ObjectDto getObjectByName(@Param("bucketName") String bucketName,
                              @Param("prefix") String prefix,
                              @Param("objectName") String objectName);

    /**
     * 查询系统中最大的五个对象信息
     * @return
     */
    List<ObjectDto> getMaxObjects();
}
